ListBox - Invertir selección

Descripción general:

El siguiente apunte muestra como implementar el proceso [InvertirSeleccion] de un ListBox

Un control ListBox tiene implementadas las funciones [SelectAll], y [UnselectAll] para seleccionar todos los elementos o bien para quitar la selección de todos ellos

El problema surge cuando quiero implementar el proceso [InvertirSeleccion], porque tendré que hacerlo con código

El código es el siguiente:


#Region "Botón InvertirSeleccion"

    Friend Sub ExecuteInvertirSeleccion()

        ' Esta colección contendrá los nuevos elementos seccionados
        Dim nuevaSeleccion As New List(Of LayerModelo.ItemUnaImagen)

        ' Recorro el ListBox
        For Each elementoListBox As LayerModelo.ItemUnaImagen In MyListBoxFotos.Items
            If MyListBoxFotos.SelectedItems.Contains(elementoListBox) Then
                ' ya esta seleccionado, no hacer nada
            Else
                'No esta seleccionado. como estoy invirtiendo la selección,
                'lo incluyo en la NUEVA lista de elementos seleccionados
                nuevaSeleccion.Add(elementoListBox)
            End If
        Next

        ' Borro TODOS los elementos actualmente seleccionados
        MyListBoxFotos.SelectedItems.Clear()

        ' Incluyo los NUEVOS elementos seleccionados
        ' en la lista de elementos seleccionados del listBox
        For Each elementoSeleccionado As LayerModelo.ItemUnaImagen In nuevaSeleccion
            MyListBoxFotos.SelectedItems.Add(elementoSeleccionado)
        Next

    End Sub

#End Region